#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import pygtk
pygtk.require("2.0")
import gtk, gtk.glade, urllib, urllib2

class ConsultaPoste:

    def __init__(self):
        gtk.threads_init()
        gtk.threads_enter()
        self.glade = gtk.glade.XML("bus.glade")
        self.glade.signal_autoconnect(self)
        self.glade.get_widget("window1").show_all()
        self.listStore = gtk.ListStore(str,str,str)
        self.tree = self.glade.get_widget("treeConsulta")
        self.tree.set_model(self.listStore)
        column = gtk.TreeViewColumn("Línea",gtk.CellRendererText(),text=0)
        self.tree.append_column(column)
        column = gtk.TreeViewColumn("Destino",gtk.CellRendererText(),text=1)
        self.tree.append_column(column)
        column = gtk.TreeViewColumn("Tiempo",gtk.CellRendererText(),text=2)
        self.tree.append_column(column)

    def on_window1_delete_event(self, widget, event):
        gtk.main_quit()
   
    def on_btnPoste_clicked(self, widget):
        self.comprobador(self.glade.get_widget("txtPoste").get_text())

    def on_dlgPoste_response(self, widget, id):
        self.glade.get_widget("dlgPoste").hide()

    def on_dlgSinInformacion_response(self, widget, id):
        self.glade.get_widget("dlgSinInformacion").hide()

    def on_dlgErronea_response(self, widget, id):
        self.glade.get_widget("dlgErronea").hide()

    def on_txtPoste_key_press_event(self, widget, event):
        if event.keyval==65421:
            self.comprobador(self.glade.get_widget("txtPoste").get_text())

    def comprobador(self, texto):
        try:
            if (int(texto)>0) and (int(texto)<10000):
                self.consultaPoste(texto)
            else:
                self.glade.get_widget("dlgPoste").show()
        except NameError, e:
            print e
        except AttributeError, e:
            print e
        except:
            self.glade.get_widget("dlgPoste").show()

    def consultaPoste(self, poste):
        frecuencias = []
        try:
            params = urllib.urlencode({"poste": poste})
            f = urllib2.urlopen("http://80.32.15.59/tuzsa_frm_esquemaparadatime.php"+"?"+params)
            aux = 0
            while True:
                linea = f.readline()
                linea = linea.decode("iso-8859-1")
                aux+=1
                if not linea: break
                #esta es la línea con los datos de la parada
                if aux==11: 
                    if linea.find("POSTE SIN INFORMACION")!=-1: 
                        self.glade.get_widget("dlgSinInformacion").show()
                    elif linea.find("Parada erronea o en un desvio")!=-1:
                        self.glade.get_widget("dlgErronea").show()
                    else:
                        #elimino el primer trozo de código
                        linea = linea.partition('<td class="titDigital">')
                        linea = linea[2]
                        #elimino el final
	                linea = linea.partition('</table>')
                        linea = linea[0]
               	        #sustituimos </td><td class="titDigital"> por espacio en blanco
                        linea = linea.replace('</td><td class="titDigital">','_')
            	        #sustituimos </td></tr><tr><td class="digital"> por :, esto separa las diferentes frecuencias con todos los datos
                        linea = linea.replace('</td></tr><tr><td class="digital">',":")
              	        #sustituimos </td><td class="digital"> por espacio en blanco
        	        linea = linea.replace('</td><td class="digital">','_')
        	        #sustituimos </td></tr> por nada
         	        linea = linea.replace('</td></tr>','')
                        #dividimos línea en las subcadenas separadas por : para meterlas en la variable frecuencias
                        frecuencias = linea.split(':')
            f.close()
            
            #self.glade.get_widget("treeConsulta").Model = treeViewEngine 

        except IOError, e:
            print "Ocurrió un error"
            print e.reason

        
        #vamos a separar los números de línea, los destinos y los tiempos

        self.listStore.clear()
        auxFr = 0
        for frecuencia in frecuencias:
            aux = frecuencia.split('_')
            if auxFr!=0:
                self.listStore.append(aux)
            auxFr+=1


if __name__ == "__main__":
    try:
        a = ConsultaPoste()
        gtk.main()
        gtk.threads_leave()
    except:
        print sys.exc_info()[0]
